package co.com.bean.afiliacion;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.AfiliacionDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.AfiliacionFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartAfiliacion;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class AfiliacionBean
 */
@Stateless(mappedName = "ejb/AfiliacionBean")
public class AfiliacionBean implements AfiliacionBeanLocal{
	
		private AfiliacionFacadeLocal facade;
		/**
		 * Default constructor. 
		 */
		public AfiliacionBean() {
			facade = DelegateContextEJB.getAfiliacionFacadeLocal();
		}
		@Override
		public ResponseJson insertarAfiliacion(AfiliacionDTO afiliacionDTO){
			ResponseJson response = new ResponseJson(); 
			try {
				facade.create(Mapper.mapperDtoToSmartAfiliacion(afiliacionDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda almacenada.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda almacenado.");
			} catch (Throwable e) {
				System.err.println("Error insertando el Agenda -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el Agenda.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
			return response ;
		}
		@Override
		public ResponseJson editAfiliacion(AfiliacionDTO afiliacionDTO) {
			ResponseJson response = new ResponseJson(); 
			try {
				afiliacionDTO.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartAfiliacion(afiliacionDTO));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda editado.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda editado.");
			} catch (Throwable e) {
				System.err.println("Error editando el Agenda -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el Agenda.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}

			return response ;
		}
		@Override
		public ResponseJson removeAfiliacion(AfiliacionDTO afiliacionDTO, boolean logic){
			ResponseJson response = new ResponseJson(); 
			if(logic){
				try {
					afiliacionDTO.setFhretiro(new Date());
					afiliacionDTO.setFhmodificacion(new Date());
					facade.edit(Mapper.mapperDtoToSmartAfiliacion(afiliacionDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda inactivado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda inactivado.");
				} catch (Throwable e) {
					System.err.println("Error editando el Agenda -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el Agenda.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}else{
				try {
					facade.remove(Mapper.mapperDtoToSmartAfiliacion(afiliacionDTO));
					response.setCodigo(Constantes.StatusResponse.OK.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda eliminado");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Agenda eliminado.");
				} catch (Throwable e) {
					System.err.println("Error eliminando el Agenda -> " + e.getMessage());
					response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
					response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el Agenda.");
					response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
				}
			}
			return response ;
		}
		@Override
		public List<AfiliacionDTO> consultarAllAfiliacion(){
			List<AfiliacionDTO> dp = new ArrayList<AfiliacionDTO>();
			for (SmartAfiliacion entity : facade.findAll()) {
				if(entity.getSmFhretiro() == null){
					dp.add(Mapper.mapperSmartAfiliacion_AfiliacionDTO(entity));
				}
			}
			return dp;
		}
		@Override
		public AfiliacionDTO consultarAfiliacionId(AfiliacionDTO afiliacionDTO) {
			AfiliacionDTO dp = new AfiliacionDTO();
			SmartAfiliacion entity  = facade.find(afiliacionDTO.getScafiliacion());
			if(entity != null && entity.getSmFhretiro() == null){
				dp = Mapper.mapperSmartAfiliacion_AfiliacionDTO(entity);
			}
			return dp;
		}
}
